import axios from 'axios'

// src/utils/request.js
// 该文件是用来第二次封装axios用的

// 开发环境 (写代码的阶段)development         
// 生产环境 (代码已经写好 已经部署到服务器了)production
// 测试环境 (代码已经写好了，但是还没有部署)production
// process.env.NOD_ENV用来获取当前环境
// const isDev = process.env.NOD_ENV == 'development';

// 创建一个请求对象
const request = axios.create({
    // baseURL:'isDev' ? 'http://121.89.205.189:3000/admin' : 'http://121.89.205.189:3000/admin',
    // baseURL: 'http://121.89.205.189:3000/admin',
    baseURL:'/',
    timeout: 60000,//默认是0（永不超时）

})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // console.log(localStorage.getItem('token'));
    // 1. 先获取token
    const token = localStorage.getItem('token');
    // 2. 设置token
    config.headers.token = token;


    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么

    // console.log('11111',);
    if (response.data.code === '10119') {
        // token无效  重新登录
        location.href = '/login';

    }

    return response.data;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});

// ajax 自定义各种数据请求的方法
export default function ajax(config) {
    // 1. 先获取一些请求的必要参数
    const { url = '', method = 'GET', data = {}, headers = {} } = config;

    // 2. 判断我们请求的类型是get还是post还是其他
    switch (method.toUpperCase()) {
        case 'GET':
            // get请求
            // get请求的翻出我们需要放在params中
            return request.get(url, { params: data });
        case 'POST':
            // post请求
            // 1. 表单提交数据
            if (headers['content-type'] == 'application/x-www-form-url-encoded') {
                // 如果提交的是表单数据我们需要格式化数据
                const obj = new URLSearchParams()
                for (const key in data) {
                    obj.append(key, data[key])
                }
                return request.post(url, obj, { headers })
            }
            // 2. 文件数据
            if (headers['content-type'] == 'multipart/form-data') {
                const obj = new FormData()
                for (const key in data) {
                    obj.append(key, data[key])
                }
                return request.post(url, obj, { headers })
            }
            // 3. json数据
            return request.post(url, data);

        case 'PUT':
            // 通常用来修改数据用的 --- 数据更新
            return request.put(url, data);

        case 'DELETE':

            return request.delete(url, { data });
        case 'PATCH':
            // 更新资源
            return request.patch(url, data);


        // 如果前面全部都不是
        default: return request.request(config);

    }



}


